/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controllers;
import beans.ListPlacas;
import beans.Mensaje;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.*;
import org.springframework.stereotype.*;
import config.GestorVehiculos; 
import config.Reloj;
import facade.PedidosFacade;
import facade.VehiculoFacade;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import packetTracker.PacketTracker;


@Controller

public class SimulacionController {  
    private static VehiculoFacade vehiculoFacade = new VehiculoFacade();
    private static PedidosFacade pedidosFacade = new PedidosFacade();
    private static boolean parado = false;
 
    private @Autowired ServletContext servletContext;
    
    @RequestMapping("/simulacion")
    public ModelAndView Simulacion(){
        return new ModelAndView("simulacion");
    }
    
    
    @RequestMapping(value = "/reloj.htm",method=RequestMethod.POST)
    public @ResponseBody Mensaje relojJson(){
        Mensaje mensaje= new Mensaje();
        if (PacketTracker.getInstancia().isRunning()){
            PacketTracker.getInstancia().seguirSimulacion(); 
            mensaje.me= "Esta corriendo";
        } 
        else{
            mensaje.me="No corre";
        }
        return mensaje;
    }
    
    @RequestMapping(value = "/iniciarSimulacion.htm",method=RequestMethod.POST)
    public @ResponseBody Mensaje IniciarSimulacionJson(){
        Mensaje mensaje= new Mensaje();
        if (!PacketTracker.getInstancia().isRunning()){
            PacketTracker.getInstancia().setServletContext(servletContext);
            PacketTracker.getInstancia().runSimulation(); 
        } 
        else{
            PacketTracker.getInstancia().seguirSimulacion();
        }
        return mensaje;
    }
    
    @RequestMapping(value = "/verificaSimulacion.htm",method=RequestMethod.POST)
    public @ResponseBody Mensaje verificaSimulacionJson(){
        Mensaje mensaje= new Mensaje();
        if (PacketTracker.getInstancia().isRunning()){
            PacketTracker.getInstancia().seguirSimulacion(); 
            mensaje.me= "Verdadero";
        } 
        else{
            mensaje.me="Falso";
        }
        return mensaje;
    }
    
    @RequestMapping(value = "/pararSimulacion.htm",method=RequestMethod.POST)
    public @ResponseBody Mensaje PararSimulacionJson() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException{
        Mensaje mensaje= new Mensaje();
        if (PacketTracker.getInstancia().isRunning()){
            PacketTracker.getInstancia().setTerminar(true);           
        }
        
        return mensaje;
    }
    
    @RequestMapping(value = "/actualizarPedido.htm", method=RequestMethod.POST)
    public @ResponseBody Mensaje actualizarPedidoJS() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException{
        Mensaje mensaje= new Mensaje();
        vehiculoFacade.ingresarIncidencias();
        vehiculoFacade.ingresarHorasExtras();
        mensaje.me = pedidosFacade.actualizarPedidos();
        return mensaje;
    }
        
    @RequestMapping("/actualizaPosRuta.htm")
    public ModelAndView actualizaPosRuta(@RequestParam(value="idCarro", required=true) String idCarro, @RequestParam(value="idPedido", required=true) String idPedido, @RequestParam(value="idCliente", required=true) String idCliente, HttpServletRequest request,  
            HttpServletResponse response) { 
        int idCarroI=-1;
        int idPedidoI=-1;
        int idClienteI=-1;
        if (idCarro.length()!=0){
         idCarroI = Integer.parseInt(idCarro);
        }    
        if (idPedido.length()!=0){
         idPedidoI = Integer.parseInt(idPedido);
        } 
        if (idCliente.length()!=0){
         idClienteI = Integer.parseInt(idCliente);
        }
        GestorVehiculos gestorV=GestorVehiculos.getInstancia();
        String textoJSON=gestorV.getJson(idCarroI, idPedidoI, idClienteI);
        return new ModelAndView("ruta", "textoJSON", textoJSON);//el primer parametro es el nombre de la vista
    }
    
    @RequestMapping(value = "/placas.htm", method = RequestMethod.POST)
    public @ResponseBody ListPlacas listarPlacas() {
        ListPlacas lplacas = vehiculoFacade.listarPlacas();
	return lplacas;
    }
    
//    @RequestMapping("/pronostico.htm")//declarar que este metodo respondera a /hello    
//    public ModelAndView pronostico() {
//        Pronostico pronostico = new Pronostico();
//        Calendar diaInicio = Calendar.getInstance();
//        diaInicio.set(2012, 4, 17);
//        pronostico.hallaPronostico(diaInicio);
//        return new ModelAndView("simulacion", "message", "simulación corriendo");//el primer parametro es el nombre de la vista
//    }
}
